#ifndef _SEM_HPP_
#define _SEM_HPP_

#include<iostream>
#include<semaphore.h>

//信号量对象：因环形队列中需要用到不止一个信号量（包括其相关操作），故对其进行封装处理
class Sem
{
public:
    //构造:对信号量进行初始化，设置该信号量的初始值。
    Sem(unsigned int value)
    {
        sem_init(&_sem, 0, value);
    }

    //析构：销毁信号量
    ~Sem()
    {
        sem_destroy(&_sem);
    }

    //P操作：资源预定，信号量--
    void P()
    {
        sem_wait(&_sem);
    }

    //V操作：资源释放，信号量++
    void V()
    {
        sem_post(&_sem);
    }

private:
    sem_t _sem;
};

#endif